package suanfa

import "fmt"

func suanfa2() {
	s := "abcdabcdeabf"
	fmt.Println(test(s))
}

func test(s string) int {
	var start = 0
	var maxlen = 0
	lastStr := make(map[byte]int)
	
	// 第一步如果遇到第一个字母 就放入到数组中
	for i, ch := range []byte(s) {
		
		fmt.Printf("这是i:%v", i)
		
		// i是 key值  ch 是字符串
		lastI, ok := lastStr[ch];if ok && lastI >= start {
			start = lastI + 1 // 2 3
			fmt.Printf(" -- 这是start1:%v", start)
		}
		
		// 0:a 1:b 2:c 3:a 4:b 5:c
		
		if lastStr[ch] >= start {
			start = lastStr[ch] + 1 // 1
			fmt.Printf(" -- 这是start2:%v", start)
		}
		
		// 计算长度 如果第二个不在数组中就长度加1 如果遇到重复的则重新开始计算 以此类推 算出最后出现不重复的位置 如果大于之前的就替换掉
		if i - start + 1 > maxlen {
			maxlen = i - start + 1 // 1 2 3
			fmt.Printf(" -- 这是maxlen:%v", maxlen)
		}
		
		lastStr[ch] = i // 0 1 2
		fmt.Printf(" -- 这是lastStr:%v\n", lastStr)
		
		
	}
	return maxlen
}